package br.com.wssa.smmb.controller;

import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import br.com.wssa.smmb.dao.UsuarioDAO;
import br.com.wssa.smmb.dto.MensagemDTO;

/**
 * Classse de Autenticação.
 * @author ssilva
 */
@Controller
public class AutenticacaoController {
	
	@Autowired
	private UsuarioDAO daoUsuario;
	
	/**
	 * Mapeamento de autenticação.
	 * Reparem que neste ponto definimos que apenas POST será aceito no processo
	 * de autenticação
	 * 
	 * Para lidar com sessões, tudo o que precisamos fazer é incluir na chamada do método um atributo do tipo
	 * HttpSession.
	 * @param login
	 * @param senha
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/login", method = RequestMethod.POST)
	public ModelAndView login(@RequestParam("j_username") String login, @RequestParam("j_password") String senha) {
		ModelAndView modelView = new ModelAndView("/entrar");
		MensagemDTO mensagem = new MensagemDTO();
		modelView.addObject("j_username", login);
		modelView.addObject("j_password", senha);
		modelView.addObject("loginInvalido", validaLogin(login, senha, mensagem));
		modelView.addObject("mensagem", mensagem);
		return modelView;
	}

	private boolean validaLogin(String login, String senha, MensagemDTO mensagem) {
		boolean loginInvalido = false;
		StringBuilder erro = new StringBuilder();
		if (StringUtils.isEmpty(login)) {
			erro.append("Login");
		}
		if (StringUtils.isEmpty(senha)) {
			if(StringUtils.isNotBlank(erro.toString())){
				erro.append(", ");
			}
			erro.append("Senha");
		}
		if (StringUtils.isNotBlank(erro.toString())) {
			String msg = "Preenchimento Obrigatório do(s) campo(s): " + erro.toString();
			mensagem.setMsgAdvertencia(msg);
			loginInvalido = true;
		} else {
			if (daoUsuario.getUsuario(login, senha) == null) {
				mensagem.setMsgErro("Usuário ou Senha Invalida!");
				loginInvalido = true;
			}
		}
		return loginInvalido;
	}

	/**
	 * logout.
	 * @param session HttpSession
	 * @return String
	 */
	@RequestMapping("/logout")
	public String logout(HttpSession session) {
		session.invalidate();
		return "redirect:/";
	}
}
